package com.sojson.util.file.system;

import java.io.InputStream;

import com.sojson.constant.Constant;
import com.sojson.util.file.bean.UploadBean;
import com.sojson.util.properties.PropertiesUtil;
import com.sojson.util.text.Convert;

/**
 * 文件存储系统接口
 *
 * @author liu
 * @Date 2020-06-28 10:55:28
 * @Description
 *
 */
public interface FileSystemInterface {

    /** 服务器桶名称 */
    String BUCKET_NAME = Constant.PROPERTIES.getProperty("so.file.bucketName");
    /** 临时文件的有效时间(默认为5分钟) */
    int FILE_TIMEOUT =
        Convert.toInt(PropertiesUtil.getNumberFormat(Constant.PROPERTIES.getProperty("so.file.timeout")), 60 * 5);

    /**
     * 文件上传
     *
     * @param filePath  文件位置
     * @param dir       上传目录
     * @return
     * @throws Exception
     */
    UploadBean upload(String filePath, String dir) throws Exception;

    /**
     * 文件上传
     *
     * @param fileStream    文件流
     * @param dir           上传目录
     * @param fileSuffix    文件后缀
     * @return
     * @throws Exception
     */
    UploadBean upload(InputStream fileStream, String dir, String filesuffix) throws Exception;

    /**
     * 文件上传
     *
     * @param fileBytes 文件字节流
     * @param dir       上传目录
     * @param fileSuffix    文件后缀
     * @return
     * @throws Exception
     */
    UploadBean upload(byte[] fileBytes, String dir, String filesuffix) throws Exception;

    /**
     * 下载文件
     *
     * @param objectName    唯一标识
     * @param dir           文件路径
     * @param fileName      文件名
     * @return
     * @throws Exception
     */
    boolean download(String objectName, String dir, String fileName) throws Exception;

    /**
     * 下载文件
     *
     * @param objectName    唯一标识
     * @return
     * @throws Exception
     */
    InputStream downloadGetStream(String objectName) throws Exception;

    /**
     * 下载文件
     *
     * @param objectName    唯一标识
     * @return
     * @throws Exception
     */
    byte[] downloadGetBytes(String objectName) throws Exception;

    /**
     * 删除文件
     *
     * @param objectName    唯一标识
     * @return
     * @throws Exception
     */
    boolean remove(String objectName) throws Exception;

    /**
     * 获取文件路径
     *
     * @param objectName    唯一标识
     * @return
     * @throws Exception
     */
    String getUrl(String objectName) throws Exception;

    /**
     * 获取文件路径(临时路径)
     *
     * @param objectName    唯一标识
     * @return
     * @throws Exception
     */
    String getUrlTemporary(String objectName) throws Exception;

    /**
     * 获取文件路径(临时路径)
     *
     * @param objectName    唯一标识
     * @param timeout       超时时间(单位: 秒)
     * @return
     * @throws Exception
     */
    String getUrlTemporary(String objectName, int timeout) throws Exception;

}